﻿using System;
using System.Collections.Generic;
using System.Data;
using personalplaner.business.dienstplan.plancollection;
using personalplaner.business.enums;
using personalplaner.business.stamm;

namespace personalplaner.dataprovider.services
{
	public partial class DiensteDataService
	{
		private static IEnumerable<Dienst> m_diensteData(DataTable table)
		{
			var dienstidExists = table.Columns.Contains("dienstid");
			var gerechnetExists = table.Columns.Contains("gerechnet");
			var einsatzprotagExists = table.Columns.Contains("einsatzprotag");
			var dienstnameExists = table.Columns.Contains("dienstname");
			var kurztextExists = table.Columns.Contains("kurztext");
			var langtextExists = table.Columns.Contains("langtext");
			var abteilungidExists = table.Columns.Contains("abteilungid");
			var abteilungnameExists = table.Columns.Contains("abteilungname");

			var typExists = table.Columns.Contains("typ");
			var rgbExists = table.Columns.Contains("rgb");
			var ganzertagExists = table.Columns.Contains("ganzertag");
			var colorExists = table.Columns.Contains("color");

			foreach (DataRow row in table.Rows)
			{
				yield return new Dienst
				{
					ID = dienstidExists ? row.Field<int>("dienstid") : int.MaxValue,
					Name = dienstnameExists ? row.Field<string>("dienstname") : string.Empty,
					DienstID = dienstidExists ? row.Field<int>("dienstid") : 0,
					IsGerechnet = gerechnetExists ? Convert.ToBoolean(row.Field<int>("gerechnet")) : false,
					EinsatzProTag = einsatzprotagExists ? row.Field<int>("einsatzprotag") : 1,
					DienstName = dienstnameExists ? row.Field<string>("dienstname") : string.Empty,
					KurzText = kurztextExists ? row.Field<string>("kurztext") : string.Empty,
					LangText = langtextExists ? row.Field<string>("langtext") : string.Empty,
					AbteilungID = abteilungidExists ? row.Field<int>("abteilungid") : 0,
					AbteilungName = abteilungnameExists ? row.Field<string>("abteilungname") : string.Empty,
					Typ = typExists ? row.Field<int>("typ") : 0,
					RGB = rgbExists ? row.Field<int>("rgb") : 0,
					IsGanzerTag = ganzertagExists ? Convert.ToBoolean(row.Field<int>("ganzertag")) : true,
					ColorString = colorExists ? row.Field<string>("color") : null
				};
			}
		}

        private static IEnumerable<DienstZeit> m_dienstZeitData(DataTable table)
        {
            var dienstzeitidExists = table.Columns.Contains("dienstzeitid");
            var dienstidExists = table.Columns.Contains("dienstid");
            var vonExists = table.Columns.Contains("von");
            var bisExists = table.Columns.Contains("bis");
            var typExists = table.Columns.Contains("typ");
            var datumvonExists = table.Columns.Contains("datumvon");
            var datumbisExists = table.Columns.Contains("datumbis");
            var abteilungszeitExists = table.Columns.Contains("abteilungszeit");

            foreach (DataRow row in table.Rows)
            {
                yield return new DienstZeit
                {
                    ID = dienstzeitidExists ? row.Field<int>("dienstzeitid") : int.MaxValue,
                    Name = "DienstZeit",
                    DienstZeitId = dienstzeitidExists ? row.Field<int>("dienstzeitid") : 0,
                    DienstId = dienstidExists ? row.Field<int>("dienstid") : 0,
                    Von = vonExists ? row.Field<string>("von") : string.Empty,
                    Bis = bisExists ? row.Field<string>("bis") : string.Empty,
                    ZeitEinheitTyp = typExists ? row.Field<string>("typ") == "p" ? enZeiteinheit.Pause : enZeiteinheit.Arbeit : enZeiteinheit.Arbeit,
                    DatumVon = datumvonExists ? row.Field<DateTime>("datumvon") : DateTime.MinValue,
                    DatumBis = datumbisExists ? row.Field<DateTime>("datumbis") : DateTime.MaxValue,
                    IsAbteilungsZeit = abteilungszeitExists ? row.Field<int>("abteilungszeit") == 0 ? false : true : false,
                };
            }
        }

		private static IEnumerable<DienstOverviewRow> m_PlanDienstOverviewData(DataTable table)
		{
			var dienstidExists = table.Columns.Contains("dienstid");
			var dienstnameExists = table.Columns.Contains("dienstname");
			var gerechnetExists = table.Columns.Contains("gerechnet");
			var einsatzprotagExists = table.Columns.Contains("einsatzprotag");
			var kurztextExists = table.Columns.Contains("kurztext");
			var langtextExists = table.Columns.Contains("langtext");
			var abteilungidExists = table.Columns.Contains("abteilungid");
			var abteilungnameExists = table.Columns.Contains("abteilungname");

			foreach (DataRow row in table.Rows)
			{
				yield return new DienstOverviewRow
				{
					ID = dienstidExists ? row.Field<int>("dienstid") : int.MaxValue,
                    DienstId = dienstidExists ? row.Field<int>("dienstid") : 0,
					Name = dienstnameExists ? row.Field<string>("dienstname") : string.Empty,
					IsGerechnet = gerechnetExists ? Convert.ToBoolean(row.Field<int>("gerechnet")) : false,
					EinsatzProTag = einsatzprotagExists ? row.Field<int>("einsatzprotag") : 0,
					Kurztext = kurztextExists ? row.Field<string>("kurztext") : string.Empty,
					Langtext = langtextExists ? row.Field<string>("langtext") : string.Empty,
					AbteilungId = abteilungidExists ? row.Field<int>("abteilungid") : 0,
					Abteilung = abteilungnameExists ? row.Field<string>("abteilungname") : string.Empty
				};
			}
		}
	}
}
